/**
 * @author Your Name
 * @version 1.0
 *
 * @description <p>Chess类代表棋类游戏中的一个棋子，实现序列化接口以便在网络传输或持久化存储中使用。</p>
 *
 * <p>该类包含棋子的图像视图资源引用（imageView）、名称（name）、所属玩家标识（player）、当前位置信息（P）以及目标位置信息（theP）。
 * 其中，位置信息通过Point类表示，包含了棋子在棋盘上的横纵坐标。</p>
 */
package com.example.mychess;

import javafx.scene.image.ImageView;
import java.awt.Point;
import java.io.Serializable;

public class Chess implements Serializable {

    /**
     * 棋子对应的图像资源引用字符串
     */
    private String imageView;

    /**
     * 棋子的名称
     */
    private String name;

    /**
     * 标识棋子属于哪位玩家，0 表示红方，1 表示黑方
     */
    private int player;

    /**
     * 棋子当前所在的位置
     */
    private Point P;

    /**
     * 棋子的目标位置，用于记录移动过程中的目标点
     */
    private Point theP;

    /**
     * 构造函数，用于初始化棋子实例
     *
     * @param imageView 棋子对应的图像资源引用
     * @param name      棋子名称
     * @param player    棋子所属玩家标识
     * @param x0        初始横坐标
     * @param y0        初始纵坐标
     */
    public Chess(String imageView, String name, int player, int x0, int y0) {
        this.imageView = imageView;
        this.name = name;
        this.player = player;
        P = new Point(x0, y0);
        theP = P;
    }

    /**
     * 获取棋子的目标位置
     *
     * @return 返回一个Point对象，表示棋子的目标位置
     */
    public Point getTheP() {
        return theP;
    }

    /**
     * 设置棋子的目标位置
     *
     * @param theP 目标位置的Point对象
     */
    public void setTheP(Point theP) {
        this.theP = theP;
    }

    /**
     * 设置棋子的目标位置，接受两个整数作为横纵坐标
     *
     * @param i 新的横坐标值
     * @param i1 新的纵坐标值
     */
    public void setTheP(int i, int i1) {
        theP.x = i;
        theP.y = i1;
    }

    /**
     * 获取棋子的名称
     *
     * @return 返回棋子的名称字符串
     */
    public String getName() {
        return name;
    }

    /**
     * 获取棋子所属玩家标识
     *
     * @return 返回一个整数，表示棋子所属玩家（0：红方，1：黑方）
     */
    public int getPlayer() {
        return player;
    }

    /**
     * 获取棋子的图像资源引用
     *
     * @return 返回棋子的图像资源引用字符串
     */
    public String getImageView() {
        return imageView;
    }

    /**
     * 获取棋子当前所在位置
     *
     * @return 返回一个Point对象，表示棋子当前位置
     */
    public Point getP() {
        return P;
    }

    /**
     * 覆盖toString方法，返回棋子属性的字符串表示形式
     *
     * @return 返回包含棋子所有属性的字符串
     */
    @Override
    public String toString() {
        return "Chess{" +
                "imageView='" + imageView + '\'' +
                ", name='" + name + '\'' +
                ", player=" + player +
                ", P=" + P +
                ", theP=" + theP +
                '}';
    }
}
